{"id":34874,"date":"2024-08-14T15:31:27","date_gmt":"2024-08-14T08:31:27","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/14\/installing-a-jupyter-notebook-on-a-linode-behind-an-apache-reverse-proxy\/"},"modified":"2024-08-14T15:31:27","modified_gmt":"2024-08-14T08:31:27","slug":"installing-a-jupyter-notebook-on-a-linode-behind-an-apache-reverse-proxy","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/14\/installing-a-jupyter-notebook-on-a-linode-behind-an-apache-reverse-proxy\/","title":{"rendered":"C\u00e0i \u0111\u1eb7t Jupyter Notebook tr\u00ean Linode ph\u00eda sau Apache Reverse Proxy"},"content":{"rendered":"<p>Jupyter Notebook l\u00e0 m\u1ed9t shell t\u01b0\u01a1ng t\u00e1c, n\u00e2ng cao c\u00f3 th\u1ec3 ch\u1ea1y trong tr\u00ecnh duy\u1ec7t web. Notebook ph\u1ed5 bi\u1ebfn trong s\u1ed1 c\u00e1c nh\u00e0 khoa h\u1ecdc d\u1eef li\u1ec7u v\u00e0 h\u1ed7 tr\u1ee3 k\u1ebft xu\u1ea5t tr\u1ef1c tuy\u1ebfn c\u00e1c h\u00ecnh \u1ea3nh, xu\u1ea5t sang nhi\u1ec1u \u0111\u1ecbnh d\u1ea1ng kh\u00e1c nhau v\u00e0 LaTeX \u0111\u1ec3 ghi ch\u00fa to\u00e1n h\u1ecdc. H\u01b0\u1edbng d\u1eabn n\u00e0y nh\u1eb1m m\u1ee5c \u0111\u00edch c\u1ea5u h\u00ecnh tr\u00ean Linode m\u1ed9t m\u00e1y ch\u1ee7 Jupyter Notebook c\u00f4ng khai s\u1ebd t\u1ea1o \u0111i\u1ec1u ki\u1ec7n truy c\u1eadp t\u1eeb xa v\u00e0o nhu c\u1ea7u t\u00ednh to\u00e1n c\u1ee7a b\u1ea1n b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng Apache l\u00e0m proxy ng\u01b0\u1ee3c.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Jupyter Notebook \u0111ang \u0111\u01b0\u1ee3c thay th\u1ebf b\u1eb1ng&nbsp;<a href=\"https:\/\/jupyterlab.readthedocs.io\/en\/stable\/getting_started\/overview.html\" target=\"_blank\" rel=\"noreferrer noopener\">JupyterLab<\/a>&nbsp;, gi\u1ea3i ph\u00e1p th\u1ebf h\u1ec7 ti\u1ebfp theo bao g\u1ed3m Notebooks. Tr\u01b0\u1edbc khi ti\u1ebfp t\u1ee5c, h\u00e3y c\u00e2n nh\u1eafc xem JupyterLab c\u00f3 ph\u00f9 h\u1ee3p h\u01a1n v\u1edbi nhu c\u1ea7u c\u1ee7a b\u1ea1n kh\u00f4ng.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/#before-you-begin\"><\/a><\/h2>\n<p>V\u00ec h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u01b0\u1ee3c vi\u1ebft cho Linodes ch\u1ea1y Ubuntu 16.04, b\u1ea1n n\u00ean:<\/p>\n<ol>\n<li>N\u1ebfu b\u1ea1n ch\u01b0a th\u1ef1c hi\u1ec7n, h\u00e3y t\u1ea1o m\u1ed9t t\u00e0i kho\u1ea3n Linode v\u00e0 Compute Instance. Xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/platform\/get-started\/\">B\u1eaft \u0111\u1ea7u v\u1edbi Linode<\/a>&nbsp;v\u00e0&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/create\/\">T\u1ea1o Compute Instance<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/li>\n<li>L\u00e0m theo h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/\">Thi\u1ebft l\u1eadp v\u00e0 B\u1ea3o m\u1eadt Phi\u00ean b\u1ea3n Compute<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i \u0111\u1ec3 c\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 mu\u1ed1n \u0111\u1eb7t m\u00fai gi\u1edd, c\u1ea5u h\u00ecnh t\u00ean m\u00e1y ch\u1ee7, t\u1ea1o t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng gi\u1edbi h\u1ea1n v\u00e0 t\u0103ng c\u01b0\u1eddng quy\u1ec1n truy c\u1eadp SSH.<\/li>\n<\/ol>\n<h2 id=\"install-anaconda-package-manager\">C\u00e0i \u0111\u1eb7t Anaconda Package Manager<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/#install-anaconda-package-manager\"><\/a><\/h2>\n<p>Anaconda l\u00e0 tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i c\u00f3 h\u1ed7 tr\u1ee3 t\u00edch h\u1ee3p cho m\u00f4i tr\u01b0\u1eddng \u1ea3o. N\u00f3 \u0111i k\u00e8m v\u1edbi m\u1ed7i l\u1ea7n c\u00e0i \u0111\u1eb7t Jupyter Notebook v\u00e0 \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb b\u1edfi t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Jupyter.<\/p>\n<p>1.SSH v\u00e0o Linode c\u1ee7a b\u1ea1n v\u00e0 c\u00e0i \u0111\u1eb7t phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t c\u1ee7a Anaconda. V\u00ed d\u1ee5 b\u00ean d\u01b0\u1edbi t\u1ea3i xu\u1ed1ng phi\u00ean b\u1ea3n Anaconda v\u1edbi Python 3.6 (nh\u01b0ng Python 2.7 c\u0169ng kh\u1ea3 d\u1ee5ng):<\/p>\n<pre class=\"wp-block-code\"><code>wget https:\/\/repo.continuum.io\/archive\/Anaconda3-4.4.0-Linux-x86_64.sh\n<\/code><\/pre>\n<p>2.Ch\u1ea1y t\u1eadp l\u1ec7nh c\u00e0i \u0111\u1eb7t:<\/p>\n<pre class=\"wp-block-code\"><code>bash ~\/Anaconda3-4.4.0-Linux-x86_64.sh\n<\/code><\/pre>\n<p>3.L\u00e0m theo l\u1eddi nh\u1eafc trong thi\u1ebft b\u1ecb \u0111\u1ea7u cu\u1ed1i, ch\u1ea5p nh\u1eadn c\u00e1c \u0111i\u1ec1u kho\u1ea3n v\u00e0 cho ph\u00e9p tr\u00ecnh c\u00e0i \u0111\u1eb7t t\u1ea1o PATH trong&nbsp;<code>.bashrc<\/code>.<\/p>\n<p>4.T\u1ea3i l\u1ea1i nh\u1eefng thay \u0111\u1ed5i m\u1edbi&nbsp;<code>.bashrc<\/code>b\u1eb1ng:<\/p>\n<pre class=\"wp-block-code\"><code>exec bash\n<\/code><\/pre>\n<h2 id=\"create-a-self-signed-certificate\">T\u1ea1o ch\u1ee9ng ch\u1ec9 t\u1ef1 k\u00fd<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/#create-a-self-signed-certificate\"><\/a><\/h2>\n<p>T\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c khuy\u1ebfn ngh\u1ecb t\u1ea1o ch\u1ee9ng ch\u1ec9 SSL t\u1ef1 k\u00fd \u0111\u1ec3 ng\u0103n ch\u1eb7n vi\u1ec7c g\u1eedi m\u1eadt kh\u1ea9u ch\u01b0a m\u00e3 h\u00f3a trong Notebook t\u1eeb tr\u00ecnh duy\u1ec7t. \u0110i\u1ec1u n\u00e0y \u0111\u1eb7c bi\u1ec7t quan tr\u1ecdng v\u00ec Jupyter Notebook c\u00f3 th\u1ec3 ch\u1ea1y c\u00e1c t\u1eadp l\u1ec7nh bash. N\u1ebfu b\u1ea1n c\u00f3 t\u00ean mi\u1ec1n, h\u00e3y c\u00e2n nh\u1eafc s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/secure-http-traffic-certbot\/\">Certbot<\/a>&nbsp;thay v\u00ec ch\u1ee9ng ch\u1ec9 t\u1ef1 k\u00fd.<\/p>\n<p>1.T\u1ea1o ch\u1ee9ng ch\u1ec9 t\u1ef1 k\u00fd c\u00f3 hi\u1ec7u l\u1ef1c trong 365 ng\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem\n<\/code><\/pre>\n<p>L\u1ec7nh n\u00e0y s\u1ebd t\u1ea1o ra&nbsp;<code>mykey.key<\/code>v\u00e0&nbsp;<code>mycert.pem<\/code>.<\/p>\n<p>2.H\u1ea1n ch\u1ebf c\u00e1c t\u1eadp tin ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p \u0111\u1ecdc b\u1edfi ch\u1ee7 s\u1edf h\u1eefu:<\/p>\n<pre class=\"wp-block-code\"><code>chmod 400 mykey.key\nchmod 400 mycert.pem<\/code><\/pre>\n<h2 id=\"configure-jupyter-notebook\">C\u1ea5u h\u00ecnh Jupyter Notebook<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/#configure-jupyter-notebook\"><\/a><\/h2>\n<p>1.T\u1ea1o m\u1ed9t t\u1ec7p c\u1ea5u h\u00ecnh m\u1edbi. Thao t\u00e1c n\u00e0y s\u1ebd t\u1ea1o m\u1ed9t&nbsp;<code>~\/.jupyter<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>jupyter notebook --generate-config\n<\/code><\/pre>\n<p>2.T\u1ea1o m\u1eadt kh\u1ea9u cho s\u1ed5 tay:<\/p>\n<pre class=\"wp-block-code\"><code>jupyter notebook password\n<\/code><\/pre>\n<p>3.Sao ch\u00e9p m\u1eadt kh\u1ea9u t\u1eeb&nbsp;<code>jupyter_notebook_config.json<\/code>t\u1eadp tin v\u1eeba t\u1ea1o.<\/p>\n<p>4.B\u1ecf ch\u00fa th\u00edch c\u00e1c d\u00f2ng sau trong t\u1ec7p c\u1ea5u h\u00ecnh:<\/p>\n<pre class=\"wp-block-code\"><code>c.NotebookApp.allow_origin = '*'\nc.NotebookApp.base_url = '\/jupyter'\nc.NotebookApp.certfile = '\/absolute\/path\/to\/mycert.pem'\nc.NotebookApp.ip = 'localhost'\nc.NotebookApp.keyfile = '\/absolute\/path\/to\/mykey.key'\nc.NotebookApp.open_browser = False\nc.NotebookApp.password = 'paste_hashed_password_here'\nc.NotebookApp.trust_xheaders = True<\/code><\/pre>\n<h2 id=\"configure-apache-reverse-proxy\">C\u1ea5u h\u00ecnh Apache Reverse Proxy<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/#configure-apache-reverse-proxy\"><\/a><\/h2>\n<p>1.C\u00e0i \u0111\u1eb7t Apache 2.4:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install apache2\n<\/code><\/pre>\n<p>2.B\u1eadt a2enmod:<\/p>\n<pre class=\"wp-block-code\"><code>sudo a2enmod\n<\/code><\/pre>\n<p>M\u1ed9t l\u1eddi nh\u1eafc s\u1ebd xu\u1ea5t hi\u1ec7n v\u1edbi danh s\u00e1ch c\u00e1c b\u1ea3n mod cho Apache:<\/p>\n<pre class=\"wp-block-code\"><code>Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_fcgi authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor ident include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_prefork mpm_worker negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_html proxy_http proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb spelling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc\n\nWhich module(s) do you want to enable (wildcards ok)?<\/code><\/pre>\n<p>3.B\u1eadt&nbsp;<code>mod_proxy<\/code>,&nbsp;<code>mod_proxy_http<\/code>,&nbsp;<code>mod_proxy_wstunnel<\/code>,&nbsp;<code>mod_ssl<\/code>, v\u00e0&nbsp;<code>mod_headers<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>proxy proxy_http proxy_https proxy_wstunnel ssl headers\n<\/code><\/pre>\n<p>4.\u0110i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>\/etc\/apache2\/sites-available<\/code>th\u01b0 m\u1ee5c. Sao ch\u00e9p t\u1ec7p c\u1ea5u h\u00ecnh m\u1eb7c \u0111\u1ecbnh r\u1ed3i th\u00eam l\u1ec7nh v\u00e0o virtualhost:<\/p>\n<pre class=\"wp-block-code\"><code>sudo cp 000-default.conf jupyter.conf\n<\/code><\/pre>\n<p>5.B\u00ecnh lu\u1eadn ra&nbsp;<code>DocumentRoot<\/code>\u0111\u1ec3 cho ph\u00e9p&nbsp;<code>https:\/\/your-domain-name\/<\/code>chuy\u1ec3n h\u01b0\u1edbng nh\u01b0&nbsp;<code>https:\/\/your-domain-name\/jupyter<\/code>.&nbsp;<code>&lt;Location&gt;<\/code>Ch\u1ec9 th\u1ecb k\u1ebft n\u1ed1i websocket \u0111\u1ec3 cho ph\u00e9p kernel m\u1eb7c \u0111\u1ecbnh ch\u1ea1y:<\/p>\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:443&gt;\n    ServerAdmin webmaster@localhost\n#   DocumentRoot \/var\/www\/html\n\n    ErrorLog ${APACHE_LOG_DIR}.error.log\n    CustomLog ${APACHE_LOG_DIR}\/access.log combined\n\n    SSLCertificateFile \/absolute\/path\/to\/mycert.pem\n    SSLCertificateKeyFile \/absolute\/path\/to\/mykey.key\n    SSLProxyEngine On\n    SSLProxyVerify none\n    SSLProxyCheckPeerCN off\n    SSLProxyCheckPeerName off\n    SSLProxyCheckPeerExpire off\n\n    ServerName localhost\n    ProxyPreserveHost On\n    ProxyRequests Off\n    LogLevel debug\n\n    ProxyPass \/jupyter https:\/\/localhost:8888\/jupyter\n    ProxyPassReverse \/jupyter https:\/\/localhost:8888\/jupyter\n    RequestHeader set Origin \"https:\/\/localhost:8888\"\n    Redirect permanent \/ https:\/\/your-domain-name\/jupyter\n\n    &lt;Location \"\/jupyter\/api\/kernels\"&gt;\n        ProxyPass wss:\/\/localhost:8888\/jupyter\/api\/kernels\n        ProxyPassReverse wss:\/\/localhost:8888\/jupyter\/api\/kernels\n    &lt;\/Location&gt;\n\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: \u0110\u01b0\u1eddng&nbsp;<code>\/jupyter<\/code>d\u1eabn url c\u00f3 th\u1ec3 c\u00f3 b\u1ea5t k\u1ef3 t\u00ean n\u00e0o mi\u1ec5n l\u00e0 n\u00f3 kh\u1edbp v\u1edbi \u0111\u01b0\u1eddng d\u1eabn url c\u01a1 s\u1edf \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong t\u1ec7p c\u1ea5u h\u00ecnh s\u1ed5 ghi ch\u00e9p Jupyter.<\/p>\n<p>6.K\u00edch ho\u1ea1t c\u1ea5u h\u00ecnh m\u1edbi \u0111\u01b0\u1ee3c t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>sudo a2ensite jupyter.conf\n<\/code><\/pre>\n<p>7.Kh\u1edfi \u0111\u1ed9ng l\u1ea1i m\u00e1y ch\u1ee7 Apache:<\/p>\n<pre class=\"wp-block-code\"><code>sudo service apache2 restart\n<\/code><\/pre>\n<p>8.Kh\u1edfi \u0111\u1ed9ng Jupyter Notebook:<\/p>\n<pre class=\"wp-block-code\"><code>jupyter notebook\n<\/code><\/pre>\n<h2 id=\"run-jupyter-notebook\">Ch\u1ea1y Jupyter Notebook<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/#run-jupyter-notebook\"><\/a><\/h2>\n<ol>\n<li>Tr\u00ean m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n, h\u00e3y \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>https:\/\/your-domain-name\/<\/code>n\u01a1i&nbsp;<code>your-domain-name<\/code>c\u00f3 \u0111\u1ecba ch\u1ec9 IP c\u1ee7a Linode ho\u1eb7c t\u00ean mi\u1ec1n b\u1ea1n \u0111\u00e3 ch\u1ecdn. N\u1ebfu s\u1eed d\u1ee5ng ch\u1ee9ng ch\u1ec9 t\u1ef1 k\u00fd, tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n c\u00f3 th\u1ec3 y\u00eau c\u1ea7u b\u1ea1n x\u00e1c nh\u1eadn ngo\u1ea1i l\u1ec7 b\u1ea3o m\u1eadt:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/jupyter-add-exception_hu84818ecd531d316bc59f3f8b1441b38b_178723_1786x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"OpenSSL Browser Error\"><\/li>\n<li>N\u1ebfu Apache \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u00fang, Jupyter s\u1ebd nh\u1eafc b\u1ea1n \u0111\u0103ng nh\u1eadp:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/jupyter-login-page_hu1298d5a353d9066b330f2600342ea7df_32000_1710x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Jupyter Login Page\"><\/li>\n<li>T\u1ea1o m\u1ed9t s\u1ed5 ghi ch\u00e9p m\u1edbi b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng h\u1ea1t nh\u00e2n Python:<img loading=\"lazy\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/jupyter-new-notebook.png\" alt=\"H\u1ea1t nh\u00e2n Python Jupyter\" width=\"216\" height=\"226\"><\/li>\n<li>Notebook \u0111\u00e3 s\u1eb5n s\u00e0ng \u0111\u1ec3 ch\u1ea1y m\u00e3 Python ho\u1eb7c c\u00e1c h\u1ea1t nh\u00e2n b\u1ed5 sung \u0111\u01b0\u1ee3c th\u00eam v\u00e0o trong t\u01b0\u01a1ng lai:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/jupyter-code-sample_hu567052d8c614ec7d90553f3ed4fe6438_38345_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Jupyter Notebook Code\"><\/li>\n<\/ol>\n<p>L\u01b0u \u00fd thi\u1ebft l\u1eadp n\u00e0y ch\u1ec9 d\u00e0nh cho m\u1ed9t ng\u01b0\u1eddi d\u00f9ng; nhi\u1ec1u ng\u01b0\u1eddi d\u00f9ng c\u00f9ng l\u00fac tr\u00ean c\u00f9ng m\u1ed9t Notebook c\u00f3 th\u1ec3 g\u00e2y ra k\u1ebft qu\u1ea3 kh\u00f4ng th\u1ec3 \u0111o\u00e1n tr\u01b0\u1edbc. \u0110\u1ed1i v\u1edbi m\u00e1y ch\u1ee7 nhi\u1ec1u ng\u01b0\u1eddi d\u00f9ng, h\u00e3y c\u00e2n nh\u1eafc s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/github.com\/jupyterhub\/jupyterhub\" target=\"_blank\" rel=\"noreferrer noopener\">JupyterHub<\/a>&nbsp;thay th\u1ebf.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/jupyter-notebook.readthedocs.io\/en\/stable\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u Jupyter Notebook<\/a><\/li>\n<li><a href=\"https:\/\/docs.continuum.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u Anaconda<\/a><\/li>\n<li><a href=\"https:\/\/certbot.eff.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ch\u1ee9ng nh\u1eadn<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n : https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jupyter Notebook l\u00e0 m\u1ed9t shell t\u01b0\u01a1ng t\u00e1c, n\u00e2ng cao c\u00f3 th\u1ec3 ch\u1ea1y trong tr\u00ecnh duy\u1ec7t web. Notebook ph\u1ed5 bi\u1ebfn trong s\u1ed1 c\u00e1c nh\u00e0 khoa h\u1ecdc d\u1eef li\u1ec7u v\u00e0 h\u1ed7 tr\u1ee3 k\u1ebft xu\u1ea5t tr\u1ef1c tuy\u1ebfn c\u00e1c h\u00ecnh \u1ea3nh, xu\u1ea5t sang nhi\u1ec1u \u0111\u1ecbnh d\u1ea1ng kh\u00e1c nhau v\u00e0 LaTeX \u0111\u1ec3 ghi ch\u00fa to\u00e1n h\u1ecdc. H\u01b0\u1edbng d\u1eabn n\u00e0y nh\u1eb1m<\/p>\n","protected":false},"author":1,"featured_media":35495,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-34874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-big-data"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34874"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34874\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35495"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}