2025-12-03 13:30:58
moljin69
배포 순서
1. 우분투 서버 준비 및 공유기 port forwarding 설정/도커 설치
2. 미리 준비 할 파일들 작성
.gitignore
Dockerfile
nginx.conf
redis.conf
3. container 안으로 넣어야 할 파일들(서버의 fastapi 폴더에 미리 저장)
env.py(alembic init migrations 후에 교체용): 서버 터미널에서 직접 이동시켜야 함
alembic.ini(alembic init migrations 후에 교체용): 서버 터미널에서 직접 이동시켜야 함
nginx.conf와 redis.conf 작성: appContainer로 통일(추후 nginx.conf 파일 수정 불필요하게 하기 위해)
nginx.conf(nginx 서버와 appContainer가 통신하기 위한 파일): nginxContainer build시에 portainer에서 첨부함
redis.conf: redisContainer build시에 portainer에서 첨부함
4. git push
5. portainer Container생성
docker run -d -p <서버port>:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
6. Portainer 접속: appContainer를 만들기 위한 docker image build
7. nginx-basics(혹은 nginx-apps)라는 networks를 만든다.(nginxContainer server와 appContainer server간 통신을 위한 network 설정)
8. container 생성할 때 마운트할 volumes를 portainer에서 만들어 놓음(컨테이너 삭제후 재설치 업데이트시에 데이터들 보존을 위해)
db_migrations
mysql_data
redis_data
app_static
media_default
user_images
user_videos
9. container 생성 및 구동
a. redisContainer
Commands & logging/Override: redis-server /usr/local/etc/redis/redis.conf --requirepass 981011
Volumes:
container/volume: /data ===> volume: /redis-data
container/bind: /usr/local/etc/redis/redis.conf ===> host: /home/moljin/fastapi/redis.conf
Restart policy: Always
b. mysqlContainer
Volumes:
container/volume: /var/lib/mysql ===> volume: /mysql_data
Env: add Environment variables
MYSQL_ROOT_PASSWORD: <비밀번호>
MYSQL_DATABASE: <DB명>
Restart policy: Always
c. nginxContainer
Volumes:
container/bind: /etc/nginx/nginx.conf ===> host: /home/moljin/fastapi/nginx.conf
Network:
nginx-apps
Restart policy: Always
d. appContainer
Volumes:
container/volume: /home/moljin/FastAPIjavaQuill_0.0.2/app/media/user_images ===> volume: /user_images
container/volume: /home/moljin/FastAPIjavaQuill_0.0.2/app/media/user_videos ===> volume: /user_videos
container/volume: /home/moljin/FastAPIjavaQuill_0.0.2/app/media/default ===> volume: /media_default
container/volume: /home/moljin/FastAPIjavaQuill_0.0.2/app/static ===> volume: /app_static
container/volume: /home/moljin/FastAPIjavaQuill_0.0.2/migrations ===> volume: /db_migrations
Network:
nginx-apps
Env:
.env 첨부
Restart policy: Always
### appContainer 내부로 들어가서 파일을 이동시켜 덮어쓰는 방법 ###
### docker exec -it appContainer /bin/bash ===> root@62da4c7afc4e:/home/moljin/FastAPIjavaQuill_0.0.2#
alembic init migrations
### exit 후 moljin@ubuntuserver:에서 아래 명령어로 두개의 파일 이동 덮어쓰기
### docker cp /home/moljin/fastapi/alembic.ini appContainer:/home/moljin/FastAPIjavaQuill_0.0.2/
### docker cp /home/moljin/fastapi/env.py appContainer:/home/moljin/FastAPIjavaQuill_0.0.2/migrations/
### 다시 docker exec -it appContainer /bin/bash
alembic revision --autogenerate -m "Initial migrations"
alembic upgrade head
### exit
docker logs appContainer
docker logs nginxContainer
docker logs mysqlContainer
sudo cd /var/lib/docker/volumes/user_images/_data
docker ps -a
docker rm -f portainer
docker attach appContainer
