Profile picture

[Docker] 피드형 블로그 서비스 구축하기 - m1k1o/blog

JaehyoJJAng2023년 05월 05일

피드형 블로그

워드프레스와 비슷하게 php 기반의 웹 서비스이다. 하지만 워드프레스의 경우 커스텀 영역이 너무 넓어서 갈피를 잡기 어렵고 공부 범위도 매우 넓다.

m1k1o/blog 이미지의 경우 단순 피드형식의 블로그 서비스로 개인형 페이스북이라고 생각하면 될 것 같다.
폐쇄형 방식으로 별도의 어드민 페이지가 없어 config 파일에서 관리자가 수동으로 각각 설정해줘야 한다.(프로필 사진 / 배경사진 / 친구 계정 등등 ...)

타임라인 식으로 되어있고 아래와 같은 특징이 있다.

특징

  • 다크 모드, 레거시 테마 지원
  • 모든 사람, 본인 또는 친구만 게시물을 볼 수 있도록 설정 가능
  • 필요할 때만 표시되도록 타임라인에서 게시물 숨기기 기능
  • 버튼 사용하여 이미지 업로드 (모바일용)
  • 드래그 앤 드롭 사용하여 이미지 업로드

위에 작성된 특징 외에도 수 많은 특징이 존재한다.

구축

서비스를 docker-compose를 사용하여 올릴 것이기 때문에 docker-compose.yaml을 작성하면 된다.

그 전에, 데이터를 저장할 디렉토리 먼저 생성하도록 하자

$ mkdir -p /data/feed-blog/data
$ mkdir -p /data/feed-blog/data/static/images

생성 후 기본적인 컨피그를 미리 넣어둬야 한다.

$ vim /data/blog/config.ini

아래 내용을 사용자의 환경에 맞게 수정해주도록 하자. 앞에 ; 붙은건 주석처리이다.

[database]
;db_connection = sqlite
;sqlite_db = data/sqlite.db

;[database]
db_connection = mysql
;mysql_socket = /tmp/mysql.sock
mysql_host = mysql
mysql_port = 3306
mysql_user = root
mysql_pass = secret
db_name = blog

;[database]
;db_connection = postgres
;postgres_socket = /tmp/postgres.sock
;postgres_host = localhost
;postgres_port = 5432
;postgres_user = root
;postgres_pass = root
;db_name = blog

[profile]
title = Blog
name = Max Musermann
pic_small = static/images/profile.jpg
pic_big = static/images/profile_big.jpg
;cover = static/images/cover.jpg

[language]
lang = en

[components]
highlight = true

[custom]
theme = theme02
;header = data/header.html
;styles[] = static/styles/custom1.css
;styles[] = static/styles/custom2.css
;scripts = static/styles/scripts.css
;footer = "Edit this if you really want to remove my backlink :("

[bbcode]
;bbtags[quote] = "<quote>{param}</quote>"

[admin]
force_login = true
nick = demo
pass = demo

[friends]
;friends[user] = pass
;friends[user] = pass

[directories]
images_path = data/i/
thumbnails_path = data/t/
logs_path = data/logs/

[proxy]
;proxy = hostname:port
;proxyauth = username:password
;proxytype = CURLPROXY_HTTP ; default, if not set
;proxytype = CURLPROXY_SOCKS4
;proxytype = CURLPROXY_SOCKS5

;URL_PREFIX type:
;proxy = http://your.page.com/proxy.cgi?
;proxyauth = username:password
;proxytype = URL_PREFIX

[system]
;timezone = Europe/Vienna
version = 1.42
debug = false
logs = false

나는 MySQL을 사용할 것이기 때문에 [database] 섹션에서 MySQL 설정 값들의 주석을 해제하였다.


데이터가 기본 웹 사용자인 "www-data"로 생성되기 때문에 권한 또한 변경해주어야 한다.

$ chown -R www-data:www-data /data/feed-blog/

이제 docker-compose.yaml을 아래와 같이 작성하도록 하자

version: "3"

services:
  blog:
    image: m1k1o/blog:latest
    depends_on:
      - "mysql"
    restart: always
    container_name: blog
    volumes:
      - "./data:/var/www/html/data"
      - "./config.ini:/var/www/html/config.ini"
    environment:
      - TZ=Asia/Seoul
    ports:
      - "8088:80"  

  mysql:
    image: mysql:5.7
    platform: linux/amd64 # M1 MAC 환경인 경우 작성
    restart: always
    volumes:
      - "my-data:/var/lib/mysql"
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=blog

volumes:
  my-data: {}

접속

컨테이너가 정상적으로 생성되었다면 http://<IP주소>:8088으로 접근해보도록 하자.
image


로그인은 앞서 config.ini 파일의 [admin] 섹션에 있는 정보로 로그인 해주면 된다.
image


로그인을 하면 아래처럼 포스팅읋 작성할 수 있게 된다.
image


포스팅을 작성해보자.
image


마무리

스터디에서 간단한 공지용 목적으로 배포하면 좋을 것 같다.


Loading script...