워드프레스가 털리고 나서..

요 몇일 블로그를 들어오면, 납치해서 이상한 사이트로 이동하는 현상이 있었다.

난 지금 워드프레스를 Docker 위에서 돌리고 있고, 그래서 이미지를 다시 받아 실행했음에도 그런 현상이 유지된다.

이렇게 되면 문제는 별도로 저장하는 wp-contents 폴더에 뭔가 파일에 변형이 있겠구나 싶었다.

Theme 도 줄이고 plugin도 다 껐다. 어차피 필요도 없다보니.

근데. 또 몇시간뒤에 같은 증상이 반복되는거다.

잘 찾아봤다. 꼼꼼히. 근데 이유는 어이가 없었다.

ID 비번이 털려서. 그냥 admin으로 로그인한뒤, 이상한 plugin만 설치하고 가는거였다…..

결론 : ID 비번을 어렵게 합시다.!

FFMPEG 컨버팅

1. h264로 트랜스코딩 (mkv로)

ffmpeg -i 원본파일 -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format='nv12|vaapi,hwupload' -acodec copy(혹은 ac3등) 출력파일

2. mkv로 embeded 자막추가 (mp4도 같은방식)

ffmpeg -i 원본파일 -sub_charenc cp949 -i 자막파일.smi -codec copy -scodec srt -metadata:s:s:0 language=kor 출력파일.mkv

<트랜스코딩과 자막 Embedding을 동시에>

ffmpeg -i 원본파일 -sub_charenc cp949 -i 자막파일.smi -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format='nv12|vaapi,hwupload' -acodec copy(혹은 ac3등) -scodec srt -metadata:s:s:0 language=kor  출력파일

3. concat (파일 합치기)
concat.txt를 다음과 같이 만듬

file "첫번째파일"
file "두번째파일"
...

이후 다음 실행

ffmpeg -f concat -i concat.txt -c copy 출력파일

2에서 각각 자막을 embed 시켰다면 3에서도 제대로 나옴.

Docker로 wordpress 운영 및 https-portal을 사용할 때 문제 해결하기

참고 : https://dev.to/foresthoffman/hosting-wordpress-over-https-with-docker-5gc

일반적으로 운영할때 생기는 문제는 https로 모든게 안 포워딩돼서 크롬 등에서 css등을 아예 다운 안받아 온다는 것 (https 가 아닌 컨텐츠 다운안됌)

그리고 wp-admin 에 아예 못들어간다는것.

 

해결책

wordpress/wp-config.php 에

###
// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';

    // Force SSL in admin.
    define('FORCE_SSL_ADMIN', true);
}

/* That's all, stop editing! Happy blogging. */
###

추가한다. 마지막에 주석 위에 넣기만하면될듯

Docker에 –link는 곧 사라진다고 합니다..

docker에서 서로 다른 컨테이너간 Link는 참 좋은 기능이다.

WordPress 를 가정하면,

docker run –link mysql […]

이런식으로 설정이 가능하고 그럴경우 공식 wordpress는 진짜 DB 세팅 따위 안해도 되는 장점이 있다

그러나 –link는 앞으로 안쓰인다는 (https://docs.docker.com/network/links/) 것이 정설.

공통의 bridged network를 사용하는 것을 추천한다.

docker network create [브리지이름]

으로 네트워크를 설정하고.

새로 만드는 컨테이너는

 docker run --network=[브리지이름]

으로 서로 연결해준다.

이미 운영중인 컨테이너는

docker network connect [브리지이름] [컨테이너이름]

으로 연결해줄수 있다.

 

이렇게 될 경우 컨테이너이름을 host이름으로 서로 연결할수 있다.

간단한 예시

docker network create dbms
docker run --name=mariadb --restart=always -d --network=dbms -v /srv/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=비밀번호 mariadb
docker run --name wordpress --restart=always -d -p 8088:80 --network=dbms wordpress
docker run --name myadmin -d -e PMA_ARBITRARY=1 --restart=always --network=dbms -p 8081:80 phpmyadmin/phpmyadmin

이렇게 하고, wordpress 설정시  mysql 서버를 mariadb 로 정해주면된다. 물론 phpmyadmin 은 localhost 접속이 아니고 접속시 DB를 mariadb로 정해줘야 하고.

 
docker-compose (v2 기준) 으로는 더욱 간단하다.

Service 에 external을 설정하고, Network를 넣는다. 예시

version: '2'

services:
  app:
    image: nextcloud
    ports:
      - 8080:80
    networks:
      - dbms
    external_links:
      - mariadb:mariadb
    volumes:
      - /srv/nextcloud/config:/var/www/html/config
      - /media/data/nextcloud:/var/www/html/data
    restart: always

networks:
  dbms:
    external: true