쿠...sal

[컴][웹] 서브도메인 설정 방법

subdomain / how to set sub domain


서브 도메인 설정 방법

A record 추가

자신이 사용하는 DNS 로 가서 A record 를 추가한다. 아래의 newtest.testdomain.com

A newtest.testdomain.com 124.138.223.234
A testdomain.com         124.138.223.234

cloudflare

cloudflare 의 DNS 서버를 사용하는 경우 주의할 점은 "Status" 부분이다. 기본적으로 grey cloud 나 not use 로 해주자. 그렇지 않으면 cloudflare 에 의해 엉뚱한 ip address 에 묶여 있다.

Web server 설정

자신이 사용하는 web server 에서 설정을 해준다.

만약 apache 를 사용한다면 vhost.conf 등에서 아래처럼 새로운 ServerName 을 이용해서 <Virtualhost> 를 추가 하면 된다.
Listen 8080
<Virtualhost *:8080>
    ServerAdmin [email protected]
    DocumentRoot /home/public
    ServerName newtest.testdomain.com   
    ... 


방화벽 설정

당연한 이야기지만 방화벽이 걸려있으면 같이 열어줘야 한다.

[컴][웹] Apache, CentOS 7 에서 Let's Encrypt 인증서 설치





Apache, CentOS 7 에서 Certbot 설치

Certbot 이 EPEL (Extra Packages for Enterprise Linux). 형태로 제공된다.

설치

혹시 repository 설정이 안되어 있다면, the EPEL repository 를 설정해야 한다. 보통 기본으로 되어 있긴 한다.(참고)
  • sudo yum install python2-certbot-apache

실행

  • sudo certbot --apache
    • certificate 을 가져오게 된다.
    • cerbot 이 가져온 certificate 에 대해서 apache configuration 을 수정한다.
  • sudo certbot --apache certonly
    • certificate 만 가져온다.
    • 직접 apache configuration 을 수정해야 한다.
  • sudo certbot certonly
    • 서버의 지정없이 certificate 을 가져올 수 있다.
Let's Encrypt's new ACMEv2 server 에서 a wildcard certificate 를 가져오려고 한다면, Certbot's DNS plugins 를 사용해야 한다.
아래는 cloudflare 용 dns plugin (cerbot-dns-cloudflare ) 를 사용하는 command 이다.
  • sudo certbot -a certbot-dns-cloudflare -i apache -d "*.example.com" -d example.com --server https://acme-v02.api.letsencrypt.org/directory
  • sudo certbot certonly --manual -d "*.example.com" -d example.com  --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

server 지정없이 하는 방법

아래 링크에 자세한 방법이 나와 있다.



server 지정없이 한 경우 결과화면

IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/certbot renew/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/certbot renew/privkey.pem
   Your cert will expire on 2010-02-01. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:


   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le


apache vhost 설정

<VirtualHost *:443>
    DocumentRoot /home/myserverdomain/public
    ServerName dd.myserverdomain.com
    ServerAlias dd.myserverdomain.com

    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder     on
    SSLOptions +StrictRequire

    SSLEngine on
    SSLCertificateFile "/etc/letsencrypt/live/myserverdomain.com/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/myserverdomain.com/privkey.pem"
    SSLCertificateChainFile "/etc/letsencrypt/live/myserverdomain.com/chain.pem"
    ...



인증서 갱신

인증서를 갱신(renew) 하는 방법은 아래와 같다. 이것을 주기적으로 하고 싶다면 cron 이나 systemd timer 에 넣어놓으면 된다. 보통 하루에 2번 수행하는 것을 추천한다. renew 시점이 아니면 아무일도 하지 않아서 계속 돌려도 문제는 없다.[ref. 1]
  • sudo certbot renew --dry-run

문제

httpd: Syntax error on line 23 of /etc/httpd/conf/httpd.conf: Cannot load modules/mod_mpm_event.so into server
httpd 가 yum 에 의해 설치되지 않아서 일까 위의 문제가 발생했다. 그래서 Cerbot 없이 설치하는 법을 택했다.




Cerbot 없이




References

  1. Certbot | Apache on CentOS/RHEL 7 


[컴][웹] React Hooks


React Hooks

Hook 은 거창한 것이 아니다. 이미 class component 에서 제공하던 state 를 function component 에서도 가능하게 해주는 function(?) 라고 보면 된다.

기존의 function component 에서는 state를 사용할 수 없었다.
이 React Hooks 는 아직 정식으로 release 되지 않았다.

Hook 사용시 규칙

Hooks 는 use 로 시작한다. 그리고 facebook 에서도 custom Hook 에 대해서도 이 convention 을 지켜달라고 한다.[ref. 2]

참고로, ref. 3 에 보면 왜 이름을 createState 가 아니라 useState 로 지었는지 이야기가 나온다.
아래 링크를 참고하자.

Hooks FAQ

Hooks 가 어떻게 동작하는가?
How does React associate Hook calls with components?

React keeps track of the currently rendering component. Thanks to the Rules of Hooks, we know that Hooks are only called from React components (or custom Hooks — which are also only called from React components).

There is an internal list of “memory cells” associated with each component. They’re just JavaScript objects where we can put some data. When you call a Hook like useState(), it reads the current cell (or initializes it during the first render), and then moves the pointer to the next one. This is how multiple useState() calls each get independent local state.

References

  1. Introducing Hooks – React
  2. Writing Custom Hooks – React
  3. Using the State Hook – React

[컴][go] golang 의 interface{}(interface type) 의 itable 이 어떻게 생성될까.

golang itable  / how to generate itable in go / go virtual function table /

Go의 itable 의 생성

interface{}(interface type) 에 대한 itable 이 어떻게 생성되는지에 대한 설명이다.

Go 의 dynamic type conversion 들은 compiler 또는 linker 가 미리 모든 가능한 itable 들을 미리계산하는 것이 합리적이지 않다는 뜻이다.

너무 많은 (interface type, concrete type) pair 들이 존재한다. 그리고 대다수는 필요하지 않을 것이다. 대신에, 컴파일러는 위의 예제의 Binary, int 또는 func(map[int]string) 같은 각 concrete type 에 대해서 type description structure 를 생성한다.

비슷하게, 컴파일러는 interface type 에 대해 다른 type description structure 를 하나 생성한다. 그것 또한 method list 를 갖고 있다. interface runtime 은 interface type 의 method table 에 있는 모든 method를 concrete type의 method table 에서 찾아서 itable 을 계산한다.

runtime 은 itable 을 생성한 후에, 이것을 caching 한다. 그래서 이 것은 한번의 계산만 필요하다.


Computing the Itable

Now we know what the itables look like, but where do they come from? Go's dynamic type conversions mean that it isn't reasonable for the compiler or linker to precompute all possible itables: there are too many (interface type, concrete type) pairs, and most won't be needed. Instead, the compiler generates a type description structure for each concrete type like Binary or int or func(map[int]string). Among other metadata, the type description structure contains a list of the methods implemented by that type. Similarly, the compiler generates a (different) type description structure for each interface type like Stringer; it too contains a method list. The interface runtime computes the itable by looking for each method listed in the interface type's method table in the concrete type's method table. The runtime caches the itable after generating it, so that this correspondence need only be computed once. [ref. 1]

References

  1. research!rsc: Go Data Structures: Interfaces
  2. How to use interfaces in Go by jordan orelli

[컴] 윈도우즈10 에 OpenSSH 설치하기

wondows 10 install open ssh


윈도우즈10 에 OpenSSH 설치하기

아래 link 에 설명이 나와 있다. 여기서는 Windows 10 version 1803 이전버전에 대한 설치를 진행한다.

설치하기

admin 계정으로 다음 작업들을 한다.

c:\a\apps\oepnssh\win64>powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
[SC] SetServiceObjectSecurity 성공
[SC] ChangeServiceConfig2 성공
[SC] ChangeServiceConfig2 성공
sshd and ssh-agent services successfully installed

c:\a\apps\oepnssh\win64>

그러면 아래처럼 service 가 설치된다.



port 22 열어주기

기본적으로 windows firewall 이 막고 있다. 이것을 열어주자.
powershell 로는 아래처럼 하면 된다.
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22







[컴][앱][웹] 공유 문서를 local server 에 설치해 보자.

구글독스 / 구글닥스 / google docs in local computer / local server / 로컬서버에서 구글 독스


Etherpad

local server 에서 공동으로 편집이 가능한 editor 이다. 쉽게 생각하면 구글 독스 같은 것을 로컬 서버에 설치해서 사용할 수 있다.