HAJE GitLab CI/CD로 대군주에 Flask 앱 띄우기

Daegunju Flask template

프로젝트: https://git.haje.org/popung/daegunju-flask-template
샘플 페이지: https://daegunju-flask-template.haje.org

Flask 로 만든 웹앱을 대군주에 쉽게 띄울 수 있도록 HAJE GitLab의 CI/CD 를 활용하는 템플릿 프로젝트입니다.

Flask 웹앱을 작성해서 HAJE GitLab에 푸시하면 *.haje.org 서브도메인으로 gunicorn WSGI 서버로 서빙하고, 대군주에서 돌아가는 Traefik reverse proxy 로 URL 라우팅을 합니다.

(1) Flask로 웹서비스를 만들어서 *.haje.org 에 서빙하고 싶거나 (2) HAJE GitLab 에서 CI/CD 활용하는 방법을 알아보고 싶은 경우 활용 바랍니다. 자세한 사용방법은 프로젝트 README 참조

주의사항: HAJE GitLab 과 대군주 서버 세팅에 맞춰진 프로젝트입니다. 다른 서버, 다른 GitLab 인스턴스, GitHub 등 다른 DevOps 플랫폼에서는 동작하지 않을 터이니 그런 경우 알아서 잘 하시길 바랍니다.

궁금한점/문의사항은 바로 여기 이 토픽에 답글로 적어주시고, 문제점/이슈는 프로젝트 Issues 에 작성해주시면 될 것 같습니다. 머지 리퀘스트 통한 개선은 언제나 환영합니다.

local에서는 잘 나오고, gitlab ci에서 deploy는 잘 됐는데 실제 도메인에 접속하니까 404를 띄우는데 혹시 추측되는 원인이 있을까요

log

[1]Running with gitlab-runner 15.5.1 (7178588d)

2 on HAJE Gitlab Shared Runner #1 y-Y-G8oY

3Preparing the “docker” executor

4Using Docker executor with image docker/compose:latest …

5Starting service docker:19.03.12-dind …

6Pulling docker image docker:19.03.12-dind …

7Using docker image sha256:66dc2d45749a48592f4348fb3d567bdd65c9dbd5402a413b6d169619e32f6bd2 for docker:19.03.12-dind with digest docker@sha256:674f1f40ff7c8ac14f5d8b6b28d8fb1f182647ff75304d018003f1e21a0d8771 …

8Waiting for services to be up and running (timeout 30 seconds)…

9*** WARNING: Service runner-y-y-g8oy-project-157-concurrent-0-ad9863923f1eface-docker-0 probably didn’t start properly.

10Health check error:

11start service container: Error response from daemon: Cannot link to a non running container: /runner-y-y-g8oy-project-157-concurrent-0-ad9863923f1eface-docker-0 AS /runner-y-y-g8oy-project-157-concurrent-0-ad9863923f1eface-docker-0-wait-for-service/service (docker.go:1183:2s)

12Service container logs:

132024-04-12T09:20:31.870702419Z Generating RSA private key, 4096 bit long modulus (2 primes)

142024-04-12T09:20:31.906071936Z …++++

152024-04-12T09:20:32.397064869Z …++++

162024-04-12T09:20:32.397719432Z e is 65537 (0x010001)

172024-04-12T09:20:32.409398297Z Generating RSA private key, 4096 bit long modulus (2 primes)

182024-04-12T09:20:32.563633333Z …++++

192024-04-12T09:20:32.594232926Z …++++

202024-04-12T09:20:32.594740608Z e is 65537 (0x010001)

212024-04-12T09:20:32.616640136Z Signature ok

222024-04-12T09:20:32.616653908Z subject=CN = docker:dind server

232024-04-12T09:20:32.616798117Z Getting CA Private Key

242024-04-12T09:20:32.625577072Z /certs/server/cert.pem: OK

252024-04-12T09:20:32.628441500Z Generating RSA private key, 4096 bit long modulus (2 primes)

262024-04-12T09:20:32.801143716Z …++++

272024-04-12T09:20:33.027095285Z …++++

282024-04-12T09:20:33.027447023Z e is 65537 (0x010001)

292024-04-12T09:20:33.049063253Z Signature ok

302024-04-12T09:20:33.049078969Z subject=CN = docker:dind client

312024-04-12T09:20:33.049205256Z Getting CA Private Key

322024-04-12T09:20:33.058595243Z /certs/client/cert.pem: OK

332024-04-12T09:20:33.082965913Z time=“2024-04-12T09:20:33.082896972Z” level=info msg=“Starting up”

342024-04-12T09:20:33.084146922Z time=“2024-04-12T09:20:33.084085874Z” level=warning msg=“could not change group /var/run/docker.sock to docker: group docker not found”

352024-04-12T09:20:33.084218644Z failed to load listeners: can’t create unix socket /var/run/docker.sock: device or resource busy

36*********

37Pulling docker image docker/compose:latest …

38Using docker image sha256:c3e188a6b38fa7f54cac9963e11b049f7701b8a6354962218b6bbab0fba07bdf for docker/compose:latest with digest docker/compose@sha256:b60a020c0f68047b353a4a747f27f5e5ddb17116b7b018762edfb6f7a6439a82 …

39Preparing environment00:04

40Running on runner-y-y-g8oy-project-157-concurrent-0 via 4dce2e7ddc97…

41Getting source from Git repository00:03

42Fetching changes with git depth set to 20…

43Reinitialized existing Git repository in /builds/Ray/hajeslackbot/.git/

44Checking out a1729442 as master…

45Skipping Git submodules setup

46Executing “step_script” stage of the job script00:12

47Using docker image sha256:c3e188a6b38fa7f54cac9963e11b049f7701b8a6354962218b6bbab0fba07bdf for docker/compose:latest with digest docker/compose@sha256:b60a020c0f68047b353a4a747f27f5e5ddb17116b7b018762edfb6f7a6439a82 …

48$ docker info

49Client:

50 Debug Mode: false

51Server:

52 Containers: 45

53 Running: 38

54 Paused: 0

55 Stopped: 7

56 Images: 1835

57 Server Version: 23.0.1

58 Storage Driver: overlay2

59 Backing Filesystem: extfs

60 Supports d_type: true

61 Using metacopy: false

62 Native Overlay Diff: true

63 userxattr: false

64 Logging Driver: json-file

65 Cgroup Driver: cgroupfs

66 Plugins:

67 Volume: local

68 Network: bridge host ipvlan macvlan null overlay

69 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

70 Swarm: inactive

71 Runtimes: io.containerd.runc.v2 runc

72 Default Runtime: runc

73 Init Binary: docker-init

74 containerd version: 31aa4358a36870b21a992d3ad2bef29e1d693bec

75 runc version: v1.1.4-0-g5fd4c4d

76 init version: de40ad0

77 Security Options:

78 apparmor

79 seccomp

80 Profile: builtin

81 Kernel Version: 5.15.0-88-generic

82 Operating System: Ubuntu 20.04.5 LTS

83 OSType: linux

84 Architecture: x86_64

85 CPUs: 8

86 WARNING: You’re not using the default seccomp profile

87 Total Memory: 62.69GiB

88 Name: haje-daegunju

89 ID: I5QI:HKKE:KPOB:HDPD:6UPE:4ANY:GROS:LW2B:LHF7:SS2M:NSZV:DAMZ

90 Docker Root Dir: /var/lib/docker

91 Debug Mode: false

92 Registry: https://index.docker.io/v1/

93 Labels:

94 Experimental: false

95 Insecure Registries:

96 127.0.0.0/8

97 Live Restore Enabled: false

98$ docker-compose version

99docker-compose version 1.26.2, build eefe0d3

100docker-py version: 4.2.2

101CPython version: 3.7.7

102OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020

103$ export SECRET_KEY=${SECRET_KEY}

104$ export SERVER_NAME=${SERVER_NAME}

105$ export CONTAINER_NAME=${CONTAINER_NAME}

106$ export PORT=${PORT:-8000}

107$ docker-compose down

108Stopping hajeslackbot …

109Removing hajeslackbot …

110Network web-frontend is external, skipping

111$ docker-compose up -d --build

112Building hajeslackbot_production

113Step 1/7 : FROM python:3.12

114 —> 099bf23b94d9

115Step 2/7 : RUN pip install --upgrade pip

116 —> Using cache

117 —> bc2b14d98f25

118Step 3/7 : WORKDIR /code

119 —> Using cache

120 —> d47a87e26eff

121Step 4/7 : COPY requirements.txt .

122 —> Using cache

123 —> 987733c100c1

124Step 5/7 : RUN pip install -r requirements.txt

125 —> Using cache

126 —> 4f3bd7709a81

127Step 6/7 : COPY scripts/ scripts/

128 —> Using cache

129 —> 46cf591ab56c

130Step 7/7 : CMD [“gunicorn”, “-w”, “4”, “-b”, “0.0.0.0”, “scripts:app”]

131 —> Using cache

132 —> 5f65cde50472

133Successfully built 5f65cde50472

134Successfully tagged hajeslackbot_hajeslackbot_production:latest

135Creating hajeslackbot …

136Cleaning up project directory and file based variables00:03

137Job succeeded

해결했어용 SERVER_NAME 양식에 .haje.org도 있어야하는거였는데 제대로 안읽고했던거였음…