Switched to Azure

요즘 클라우드가 다들 1년 무료라서, 돌아가면서 쓰고 있다. Amazon AWS에서 1년, Google Cloud에서 1년, 그리고 Microsoft Azure로 옮겨서 1년을 시작했다.

근데 막상 내가 작도닷넷을 옮겨보니 왜 1년이나 무료로 주는지 알만했다. 옮기는게 정말 어려웠다. 그냥 있는 그대로 옮기는 것도 엄청 어려웠다. 같은 클라우드 서비스라고 해도 아마존, 구글, 마이크로소프트가 각각 사용방법이 달랐고, 새로운 기능이 출시되고 보안이 강화된 부분이 있어서 찾아보고 공부해서 적용하는데 한참 걸렸다.

워드프레스는 돌아가지만 아직 태터툴즈, 제로보드4는 돌아가지 않는다. 차차 조치하도록 하겠다.

1. Azure에 가입하고 resource group을 만든다. location은 westus2가 제일 싸고 마침 내가 미국 서부에 있어서 여기로 정했다. 이름은 대소문자를 섞어 써도 되지만, (여기선 아니지만 key vault를 썼을 때 대소문자를 섞어 쓰면 URI를 인식하지 못하는 문제로 하도 고생을 해서) 소문자만 쓰기로 했다. (이런 사소한 문제가 사람 힘들게 한다)
az group create --name xacdonet --location westus2

2. Free tier에 맞춰 VM을 만든다. Azure는 다른 클라우드 서비스와 달리, 자기네가 정해놓은 resource들만 1년간 공짜로 지원한다. 나는 처음에 돈 아끼려고 disk를 SSD가 아니라 HDD로 만들었다가 한 40센트 정도 돈이 나간 다음에야 아차 싶어서 바꿨다. (SSD도 Standard가 아니라 Premium이 무료다) VM도 제일 작은 B1ls가 무료가 아니라 그것보다 하나 큰 B1s만 무료다. 여러분이 나와 같은 짠돌이라면 꼭 무료가 무엇인지 확인하고 VM을 만드시길 바란다.
az vm create --resource-group xacdonet --name xacdovm --image debian --size Standard_B1s --storage-sku Premium_LRS --os-disk-size-gb 63

3. SSH Key를 만든다. Azure CLI에서 SSH Key를 만들수도 있지만, Azure에 종속되기 싫어서 PuTTYgen으로 내 컴퓨터에서 SSH Key를 만들어 썼다.
az vm user update --resource-group xacdonet --name xacdovm --username kyungwoo --ssh-key-value xacdoPublicKey.txt
az vm user reset-ssh --resource-group xacdonet --name xacdovm
az vm user update --resource-group xacdonet --name xacdovm --username kyungwoo --password password

4. Azure Cloud shell에서 SSH로 VM에 접속한다. Google 클라우드도 그랬지만 이렇게 하면 내 컴퓨터에 아무것도 설치하지 않아도 다 클라우드에서 할 수 있기 때문에 편리하다. 아참 위에서 빼먹었는데, Azure cloud shell에 SSH Key, html 압축한 거, sql 백업한 것 등을 미리 올려놓고 ssh나 scp로 전송하면 편하다. (이러는게 Putty나 Filezilla 등으로 접속하는 것보다 보안상 좋아서 그런가?) 참고로 여기 올려놓는 것도 조금이나마 돈이 나가고 1년 무료에 포함되지 않기 때문에, 필요한 만큼만 잠깐 썼다가 지우면 돈을 아낄 수 있다.
ssh -i xacdoPrivateKey.pem kyungwoo@1.2.3.4
scp -i xacdoPrivateKey.pem $1 kyungwoo@1.2.3.4:/home/kyungwoo/$2

이런 명령어들은 .sh 파일로 만들어놓으면 편하다.

5. Apache를 설치하고, 전에 쓰던 html을 복사한다.
sudo apt update && sudo apt upgrade && sudo apt autoremove && sudo apt autoclean
sudo apt install apache2 apache2-utils
systemctl status apache2
sudo apache2 -v
sudo apt install unzip
sudo rm -Rf /var/www/html
sudo unzip html.zip -d /var/www
sudo chown www-data:www-data /var/www/html/ -R
sudo systemctl start apache2
sudo systemctl enable apache2

6. mariadb를 설치하고, 전에 쓰던 데이터를 붓는다. Azure에서 MariaDB, MySQL을 제공하긴 하지만, 그러면 아무리 싸도 한달에 25달러는 더 내야 해서 돈 아끼려고 그냥 VM에다 깔았다. 이러면 가끔씩 sudo apt upgrade도 해주고, mysqldump도 떠서 어디다가 저장해야 한다.
(전에 쓰던 데서)
mysqldump xacdo > xacdo.sql
mysqldump wordpress > wordpress.sql
(새거에서)
sudo apt install mariadb-server mariadb-client
systemctl status mariadb
sudo mysql
create database wordpress;
create database xacdo;
exit;
sudo mysql xacdo < xacdo.sql
sudo mysql wordpress < wordpress.sql
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation
mysql: root / password
sudo mariadb -u root
sudo mysql_upgrade --verbose -u root -p
mariadb --version

참고로 B1ls에서 RAM이 512M밖에 안되서 mariadb가 안 뜨면 performance schema를 꺼주자. (B1s는 RAM이 1G라서 굳이 안 꺼도 된다.)
sudo vi /etc/mysql/my.cf
[mysqld]
performance_schema = off


참고로 B1ls에서 RAM이 512M밖에 안되서 mariadb가 안 뜨면 performance schema를 꺼주자. (B1s는 RAM이 1G라서 굳이 안 꺼도 된다.)
sudo vi /etc/mysql/my.cf
[mysqld]
performance_schema = off

7. PHP를 설치한다.
sudo apt install php7.0 libapache2-mod-php7.0 php7.0-mysql php-common php7.0-cli php7.0-common php7.0-json php7.0-opcache php7.0-readline
sudo a2enmod php7.0
sudo systemctl restart apache2
php --version

8. WordPress를 설치한다. 이건 아까 /var/www/html 옮길때 같이 했어야 했는데, 까먹고 안 옮겨서 그냥 새로 설치했다. 덕분에 이미지 파일들이 다 날아갔다. (난 Export하면 당연히 이미지까지 같이 될 줄 알았다. 여러분은 나같은 실수 하지 마시길.)
wget https://wordpress.org/latest.tar.gz
tar xpf latest.tar.gz
rm latest.tar.gz
mv wordpress wp
sudo chown www-data:www-data /var/www/html/wp -R
sudo mysql -u root -p
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit

아참, 파일/폴더 권한을 더 넣어줘야 한다.
sudo -u www-data find . -type d -exec chmod 755 {} \;
sudo -u www-data find . -type f -exec chmod 644 {} \;

Image crop이 안되면 뭘 더 설치해야 한다.
sudo apt-get install php7.0-gd
sudo apachectl restart

9. SSL 인증서를 설치한다. 요즘 Chrome에서 SSL 안쓰면 “Not secure(안전하지 않음)”이라고 찝찝하게 뜨길래, 귀찮지만 SSL을 깔아줬다. 그렇다고 돈을 들이긴 싫어서 무료인 Let’s Encrypt를 깔았다. 이게 끝이 아니고, 3개월마다 (귀찮게) 갱신해줘야 한다.
sudo a2enmod ssl (이걸 미리 해줘야 한다. 안그러면 뭔가 안됨)
sudo apt-get install git
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto

여기서 apache SSL 설정이 자동으로 안되면 수동으로 해야지, 별 수 있나.
sudo find /var/lib/waagent/ -name "*.prv" | cut -c -57 (인증서 ID가 나옴)
sudo ls /var/lib/waagent (.crv, .prv 파일이 나옴)
cd /etc/apache2/sites-available
sudo vi default-ssl.conf (위에서 찾은 .crv, .prv 파일을 넣어줌)
sudo a2enmod ssl (여기서 아차 싶었다. 다음엔 까먹지 말고 이걸 미리 해야지 싶어서 위에다가 추가했다.)
sudo a2ensite default-ssl.conf
sudo systemctl restart apache2
sudo apache2ctl -S

10. 잘 떴나? Port를 확인한다.
sudo lsof -i -P -n | grep LISTEN
sudo netstat -tulpn | grep LISTEN

Leave a comment

Your email address will not be published. Required fields are marked *