https://docs.docker.com/engine/install/ubuntu/
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 볼륨 폴더 생성
sudo docker volume create portainer_data
# 다운로드 및 9000 포트로 실행
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --restart=always portainer/portainer
vi /etc/nginx/sites-available/moseoh.conf
server {
listen 80;
listen [::]:80;
server_name moseoh.xyz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name moseoh.xyz;
root /var/www/html;
ssl_certificate /etc/letsencrypt/live/moseoh.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/moseoh.xyz/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/moseoh.xyz/chain.pem;
ssl_dhparam /etc/ssl/dhparam.pem;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
ssl_ecdh_curve secp384r1;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
ssl_stapling on;
ssl_stapling_verify on;
index index.html index.nginx-debian.html;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
}
vi /etc/nginx/sites-available/portainer.conf
server {
listen 80;
listen [::]:80;
server_name portainer.moseoh.xyz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name portainer.moseoh.xyz;
ssl_certificate /etc/letsencrypt/live/moseoh.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/moseoh.xyz/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/moseoh.xyz/chain.pem;
ssl_dhparam /etc/ssl/dhparam.pem;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
ssl_ecdh_curve secp384r1;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
ssl_stapling on;
ssl_stapling_verify on;
location / {
proxy_pass http://localhost:9000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
}
vi /etc/nginx/sites-available/api.conf
server {
listen 80;
listen [::]:80;
server_name api.moseoh.xyz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name api.moseoh.xyz;
ssl_certificate /etc/letsencrypt/live/moseoh.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/moseoh.xyz/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/moseoh.xyz/chain.pem;
ssl_dhparam /etc/ssl/dhparam.pem;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
ssl_ecdh_curve secp384r1;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
ssl_stapling on;
ssl_stapling_verify on;
location / {
proxy_pass http://localhost:9090;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
}
sudo ln -s /etc/nginx/sites-available/moseoh.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/portainer.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/api.conf /etc/nginx/sites-enabled/
# image 확인
docker images
# image 삭제
docker rmi ${image id}
# 실행중인 컨테이너 확인
# -a 정지된 컨테이너 포함
docker ps -a
# 컨테이너 정지, 시작
docker stop ${container-name}
docker start ${container-name}
# docker run nginx
# 80포트로 들어오는 요청을 80포트로 전달
# -v 볼륨 설정
# --restart-always: 재시작시 실행
docker run -d -p 8080:8080 --name=nginx --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v nginx_data:/data nginx:stable
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.1
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<Password> --name=mariadb --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v mariadb_data:/data mariadb
docker run -d -p 9090:9090 --name=assistant_server --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v assistant_server_data:/data azqazq195/assistant_server
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Qkrrhkwkd5gh@ --name=mariadb --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v mariadb_data:/data mariadb
# 컨테이너 접속
docker exec -it ${name} /bin/bash
# 빠져나오기
exit
# 깃 클론
git clone https://github.com/flutter/flutter.git
# 환경변수 설정
# docker 재시작 시 설정이 사라지므로 .bashrc에 작성
export PATH="$PATH:`pwd`/root/flutter/bin"
# Dart SDK 압축 풀기 위함
apt-get install unzip
# 설치 확인
flutter --version
# git clone 등으로 flutter 프로젝트를 다운로드
git pull origin master
# web으로 빌드
flutter build web
# 빌드된 파일을 기존파일과 교체
rm -rf /usr/share/nginx/moseoh.xyz
cp -r /home/moseoh_server/build/web /usr/share/nginx/moseoh.xyz